<?
/******
Класс User - методы для авторизации и работы с свойствами и правами пользователя

Методы:
--------
	(TODO: НУЖНО ДОДЕЛАТЬ ОПИСАНИЕ ФУНКЦИЙ )
	
	User::get($id) - получение всех свойств пользователя с указанным id
	User::get_id($params)
	User::auth() - идентификация пользователя
	User::login - логин пользователя 
	
	
	User::logout - очищение сессии и разлогинвание пользователя (возвращение статуса гость)
	User::guest - получение объекта пользователя начального уровня (гость)
	
	~ ~ ~
	
	User::save($user_params) - сохранение (запись в файл или базу) заданных свойств пользователя или добавление нового пользователя с указанными свойствами или изменени указанных свойств
	
	User::get_users($query_params) - получение списка пользователей, удовлетворяющих заданным параметрам

	User::in_group($group_id) - проверяет, вхоит ли пользователь в указанную группу
	
	~ User::perms($object, $action) - получить права пользователя по отношению к какому-то разделу, или действию, или объекту
	
	User::exists($id)
	User::update()
	User::is_guest()
	User::is_admin
	User::is_superadmin
	User::in_group
	User::has_permition 
	
	
	
Свойства:
---------
	$User =& User::$User
	
	$User->id - id пользователя
	$User->is_guest - текущий пользователь не авторизовался, и является гостем
	$User->is_login - текущий пользователь авторизовался, и не является гостем, может редактировать свои материалы
	$User->is_editor - текущий пользователь имеет права редактора (может редактировать чужие материалы)
	$User->is_admin	- текущий пользователь имеет права администартора (может заходить в админку)
	
	$User->name - имя пользователя
	$User->email - email пользователя
	$User->pass - пароль
	... и другие свойства, сохраняемые в таблице 'users'
	

******/

class User{
	
	// свойства текущего пользователя
	static public $User=null;
	
	
	// аутентификация (определение) текущего пользователя
	static function auth()
	{
		// pr(self::$User);
		
		// пользователь уже определён?
		if ($User =& self::$User) return $User;
		// pr($User);
		
		// пользователь корректно логинится сейчас?
		if ($User = User::login()) return $User;
		// pr($User);
		
		// пользователь авторизовался ранее?
		if ($User = User::get(Session::get('user_id'))) return $User;
				
		// пользователь - гость 	
		$User = User::guest();
		
		return $User;	
	}
	
	// вход пользователя в систему , 
	// по умолчанию - исходя из данных массива $_POST 
	static function login()
	{
		$user_params = array(
							'name' => POST('login_name'), 
							'pass' => POST('login_pass'),
						);
		$User = User::get(User::get_id($user_params));
		// pr($User);
		
		if(!$User) return false;
		//pr($User);
		
		Session::start();
		// pr($_SESSION);
		
		Session::set(array(
				'user_id' => $User->id,
				'ip'	  => $_SERVER['REMOTE_ADDR'], // ???
				));
		// redirect(...);
		// exit;
	}
	
	// разлогинимвание текущего пользователя и очистка его сессии
	static function logout()
	{	
		Session::destroy();
		User::$User = User::guest();
	}
	
	// проверяет логин-пароль пользователя и возвращает его user_id 
	static function get_id($params=array())
	{
		if(!$params) return;
		// pr($params);
		if (!isset($params['pass'])) return false;
		
		
		$user_id=0;
		if($params['pass'] == Admin::$Config->admin_password)
			$user_id=1;
		
		/* $user_id = Db::get_var(
					'SELECT id FROM users WHERE 1'
						//.' AND name=? '
						  .' AND pass=? '
						//, $params['name'] 
						, $params['pass'] 
					); */
		
		return $user_id? $user_id : false;			
	}	

	// возвращает объект со свойствами пользователя по заданному $user_id
	static function get($user_id)	
	{
		if(!$user_id) return false;
		
		$user = (object)array(
					'id'		=> 1,
					'is_admin'	=> true,
					
				);
		// $user = phpDb::get_row('users/'.$user_id);
		// $user = Db::get_row('SELECT * FROM users WHERE id='.intval($user_id))
		
		return $user;
	}
	
	// возвращает свойства для пользователя гостя
	static function guest()
	{
		return (object)array(
				'is_guest'	=> true,
				'is_admin'	=> false,
				);
	}	
	
	
	
	
	
	
	


	
	// генерирует пароль заданной длины
	function make_password($length=6) 
	{
		$consonants 	= 'bBdDgGhHjJmMnNpPqQrRsStTvVwWxXzZ6789';
		$vowels 		= 'aAeEuUyY12345'; 
		$max_consonants = strlen($consonants)-1;
		$max_vowels		= strlen($vowels)-1;
		$alt = time() % 2;
		$password = '';
		
		for ($i = 0; $i < $length; $i++) 
		{
			if (($alt++) % 2 == 1) 
				$password .= $consonants[rand(0, $max_consonants)];
			else 
				$password .= $vowels[rand(0, $max_vowels)];
		}
		return $password;
	} 

}

